<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 学习数组的方法 注意
    // 1. 方法的功能
    // 2. 返回值
    // 3. 是否影响原数组

    // fill()   使用给定值，填充一个数组。
    // 返回值: 修改后的原数组
    // 是否影响原数组:影响

    // var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];
    // var result = list.fill(0);
    // console.log(result);
    // console.log(list);

    // [,,,,,,,,,,,,]
    // var list = new Array(15).fill(false);
    // console.log(list);

    // includes()  判断数组中是否存在某个元素
    var list = [1, 4, 7, 2, NaN, 5, 8, 3, 6, 9];

    console.log(list.indexOf(NaN));
    console.log(list.includes(NaN));

    // console.log(NaN == NaN);
    // console.log(typeof NaN === "number" && (NaN).toString() === "NaN");

    // flat()  将嵌套的数组“拉平”，变成一维的数组。该方法返回一个新数组，对原数据没有影响。
    // flat()默认只会“拉平”一层，如果想要“拉平”多层的嵌套数组，可以将flat()方法的参数写成一个整数，表示想要拉平的层数，默认为1。  (n维数组 拉平 n-1层)
    // 如果不管有多少层嵌套，都要转成一维数组，可以用Infinity关键字作为参数。


    // var list = [1, 2, [3, 4, [5, 6]]];  //  => [1,2,3,4,5,6]
    // var result = list.flat();
    // var result = list.flat(2);
    // console.log(result);

    // var list = [1, 2, [3, 4, [5, 6, [7, [8, [9]]]]]];
    // var result = list.flat(Infinity);
    // console.log(result);


    // function myFlat(list) {
    //     debugger;
    //     var arr = [];
    //     for (var i = 0; i < list.length; i++) {
    //         var item = list[i];
    //         if (Array.isArray(item)) { // [3, 4]
    //             var newArr = myFlat(item); // [3, 4,[5,6]]
    //             // arr.push(newArr);   数组的深复制
    //             arr = arr.concat(newArr); // 拼接后的新数组
    //         } else {
    //             arr.push(item);
    //         }
    //     }
    //     return arr;
    // }

    // console.log(myFlat(list));


    // flatMap()    先map,再flat  => 现根据原数组得到新数组,在将新数组拉平
    // flatMap()只能展开一层数组。

    var list = [1, 4, 7, 2, 5, 8, 3, 6, 9];

    // var arr = list.map(function (item, index) {
    //     return [index, item];
    // })
    // console.log(arr);

    // var newArr = arr.flat();
    // console.log(newArr);

    var newArr = list.flatMap(function (item, index) {
        return [index, item];
    })
    console.log(newArr);





</script>

</html>